﻿using System;
using System.Collections.Generic;
using System.Data;

namespace VisualTrain
{
	// Класс для хранения данных о лабораторной работе
	public class Lab
	{
		private string name;				// Имя лабораторной работы
		private string requires;			// Что требуется от студента
		private string description;			// Описание работы (пояснения преподавателя)
		private string mark;				// Оценка по лабораторной работе
		private string id_lab;				// Идентификатор лабораторной работы
		private DateTime start;				// Дата начала лабораторной работы
		private List<DateTime> date;		// Временные промежутки
		private DateTime complete;			// Дата сдачи лабораторной работы

		// Конструктор с параметром идентификатора лабораторной работы
		public Lab ( string id )
		{
			date = new List<DateTime> ();
			date.Clear ();

			id_lab = id;					// Присваиваем идентификатор работы
	
			// Ищем оценку по лабораторной
			mark = DataBase.GetString ( String.Format ( "SELECT * FROM [Rate] WHERE [Work] IN (SELECT [ID] FROM [Work] WHERE [Lab]='{0}') AND [Student]='{1}'", id_lab, Student.ID ), "Mark" );

			// Получаем имя лабораторной работы
			name = DataBase.GetString ( String.Format("SELECT * FROM [Labs] WHERE [ID]='{0}'", id), "Name" );

			// Получаем цель работы
			requires = DataBase.GetString ( String.Format ( "SELECT * FROM [Labs] WHERE [ID]='{0}'", id ), "Req" );

			// Получаем описание работы
			description = DataBase.GetString ( String.Format ( "SELECT * FROM [Labs] WHERE [ID]='{0}'", id ), "Description" );

			// Получаем дату получения работы
			string inter = DataBase.GetString ( String.Format ( "SELECT * FROM [Work] WHERE [Lab]='{0}'", id ), "Start" );
			start = new DateTime (Convert.ToInt32 ( inter.Substring ( 0, 4 ) ), Convert.ToInt32 ( inter.Substring ( 5, 2 ) ), Convert.ToInt32 ( inter.Substring ( 8, 2 ) ));

			// Получаем дату окончания работы
			inter = DataBase.GetString (String.Format("SELECT * FROM [Rate] WHERE [Work] IN (SELECT [ID] FROM [Work] WHERE [Lab]='{0}')", id), "Finish");
			complete = new DateTime (Convert.ToInt32 ( inter.Substring ( 6, 4 ) ), Convert.ToInt32 ( inter.Substring ( 3, 2 ) ), Convert.ToInt32 ( inter.Substring(0, 2 ) ));

			string ut_id;	// ID набора дат
			// Получаем даты оценивания работы
			for ( int i = 1; i <= 5; ++i )
			{
				// !!!!!!!!!!!! Сделать вложенный запрос !!!!!!!!!!!!
				ut_id = DataBase.GetString (String.Format("SELECT * FROM [Work] WHERE [Lab]='{0}'", id), "UT");

				inter = DataBase.GetString (String.Format("SELECT * FROM [UTime] WHERE [ID]='{0}'", ut_id), "t_" + i.ToString());

				// Добавляем дату в список
				date.Add ( new DateTime (Convert.ToInt32 ( inter.Substring ( 6, 4 ) ), Convert.ToInt32 ( inter.Substring ( 3, 2 ) ), Convert.ToInt32 ( inter.Substring(0, 2 ))) );
			}
		}

		// Возвращаем даты построения графика
		public List<DateTime> Dates
		{
			get
			{
				return date;
			}
		}

		// Описание работы (пояснения преподавателя)
		public string Description
		{
			get
			{
				return description;
			}
		}

		// Требуемая задача
		public string Requires
		{
			get
			{
				return requires;
			}
		}

		// Дата сдачи работы работы
		public DateTime CompleteDT
		{
			// Получение даты сдачи лабораторной работы
			get
			{
				return complete;
			}
		}

		// Дата сдачи работы
		public string CompleteS
		{
			get
			{
				return complete.Day + "." + complete.Month + "." + complete.Year;
			}
		}

		// Оценка по лабораторной работе
		public string Mark
		{
			get
			{
				return mark;
			} 
		}

		// Дата начала лабораторной работы
		public string Start
		{
			get
			{
				return start.Day + "." + start.Month + "." + start.Year;
			}
		}

		// Название работы
		public string Name
		{
			get
			{
				return name;
			}
		}
	}
}

